//进行axios的二次封装：使用他的请求与响应拦截器
import axios from 'axios'
import {ElMessage} from 'element-plus'  //引入element-plus的弹窗组件
import 'element-plus/dist/index.css'
import NProgress from "nprogress";  //引入element-plus的样式 想要用element-plus的弹窗组件，必须引入样式


//创建axios实例
const request = axios.create({
    baseURL: '/api', //基础路径
    timeout: 5000, //请求超时时间
    timeoutErrorMessage: '请求超时，请检查网络连接' // 新增

});
//请求拦截器
request.interceptors.request.use((config) => {
    // 显示进度条
    NProgress.start()
    //对请求数据进行处理
    //例如：添加token
    config.headers.Authorization = localStorage.getItem('token') || ''

    return config
})
//响应拦截器
request.interceptors.response.use((response) => {
    // 隐藏进度条
    NProgress.done()

    //对响应数据进行处理
    return response.data
}, (error) => {
    // 隐藏进度条
    NProgress.done()
    if (error.code === 'ERR_NETWORK') {
        ElMessage.error('网络连接错误或服务器错误')
        return
    }
    let message
    switch (error.response.status) {

        case 401:
            message = '登录过期，请重新登录'
            break
        case 403:
            message = '无权限，拒绝访问'
            break
        case 404:
            message = '请求地址出错'
            break
        case 408:
            message = '请求超时'
            break
        case 500:
            message = '服务器内部错误'
            break
        case 501:
            message = '服务未实现'
            break
        case 502:
            message = '网络错误'
            break
        default:
            message = error.response.data.msg
    }
    //对响应错误进行处理
    if (message) {
        ElMessage.error(message)
    }
    //返回一个reject的promise，以便在调用的地方进行处理
    return Promise.reject(error)
})
//对外暴露
export default request